home *** CD-ROM | disk | FTP | other *** search
- #ifdef xkernel
- #ifdef UNDEF
- extern void REMOVEMSGQUEUE(), INSERTMSGQUEUE();
- #else
- #define INSERTMSGQUEUE(q,m,l){\
- msgqueue *s;\
- if((s = (msgqueue *)malloc((unsigned)(sizeof(msgqueue)+l-1))) == NULL){\
- /* die...die!! */\
- } else {\
- bcopy((m),s->data,(l));\
- s->offset = 0;\
- s->length = (l);\
- s->next = (q);\
- s->prev = (q)->prev;\
- (q)->prev->next = s;\
- (q)->prev = s;\
- }\
- }
- #define REMOVEMSGQUEUE(q,m,l,ems){\
- (l) = min((l), (q)->length-(q)->offset);\
- bcopy(&((q)->data[(q)->offset]),(char *)(m),(l));\
- if ((l) < (q)->length - (q)->offset) { \
- (q)->offset += (l); \
- xkv((ems)->sem); \
- } else { \
- (q)->next->prev = (q)->prev; \
- (q)->prev->next = (q)->next; \
- free((char *)q); \
- }\
- }
- #define MSGQUEUEEMPTY(ems) ((ems)->buffers->next == (ems)->buffers)
-
- #endif
- typedef struct mq {
- struct mq *prev, *next;
- int offset,length;
- char data[1];
- } msgqueue;
-
- typedef struct emstream {
- SESSN sessn;
- int eof;
- Semaphore *sem;
- msgqueue *buffers;
- struct CompilerLoadReq *req;
- int usedForDebugging;
- } EMSTREAM;
- #endif xkernel
-